
package gui;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import model.PionType;
import model.Spel;
import model.Stuk;

/**
 *
 * @author Stijn Delbeke
 */
public class InfoBord extends JPanel implements MouseListener {

    private Vak[] keuzeVakBlauw = new Vak[12];
    private Vak[] keuzeVakRood = new Vak[12];
    private JPanel blauwPaneel = new JPanel();
    private JPanel roodPaneel = new JPanel();
    private JPanel blauwPionnenPaneel = new JPanel();
    private JPanel roodPionnenPaneel = new JPanel();
    private HashMap<PionType, Integer> keuzePionnenBlauw;
    private HashMap<PionType, Integer> keuzePionnenRood;
    private Spel game;
    private Vak gekozenVak;
    private boolean allesGezet = false;

    public InfoBord(Spel game) {
        this.game = game;
        game.setInfobord(this);

        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

        keuzePionnenBlauw = new HashMap<PionType, Integer>();
        keuzePionnenRood = new HashMap<PionType, Integer>();

        blauwPaneel.setLayout(new BoxLayout(blauwPaneel, BoxLayout.Y_AXIS));
        roodPaneel.setLayout(new BoxLayout(roodPaneel, BoxLayout.Y_AXIS));
        blauwPionnenPaneel.setLayout(new GridLayout(3, 0));
        roodPionnenPaneel.setLayout(new GridLayout(3, 0));


        for (int i = 0; i < 12; i++) {
            keuzeVakBlauw[i] = new Vak();
            keuzeVakBlauw[i].setBorder(BorderFactory.createLineBorder(Color.BLACK));
            keuzeVakBlauw[i].setOpaque(true);
            keuzeVakBlauw[i].setBackground(Color.ORANGE);
            keuzeVakBlauw[i].setVerticalTextPosition(JLabel.BOTTOM);
            keuzeVakBlauw[i].setHorizontalTextPosition(JLabel.CENTER);
            keuzeVakBlauw[i].addMouseListener(this);
            blauwPionnenPaneel.add(keuzeVakBlauw[i]);

            keuzeVakRood[i] = new Vak();
            keuzeVakRood[i].setBorder(BorderFactory.createLineBorder(Color.BLACK));
            keuzeVakRood[i].setOpaque(true);
            keuzeVakRood[i].setBackground(Color.ORANGE);
            keuzeVakRood[i].setVerticalTextPosition(JLabel.BOTTOM);
            keuzeVakRood[i].setHorizontalTextPosition(JLabel.CENTER);
            keuzeVakRood[i].addMouseListener(this);
            roodPionnenPaneel.add(keuzeVakRood[i]);
        }

        blauwPaneel.add(blauwPionnenPaneel);
        roodPaneel.add(roodPionnenPaneel);


        add(blauwPaneel);
        add(Box.createVerticalGlue());
        add(roodPaneel);

        voegAlleKeuzeStukkenToe();

    }

    public boolean isAllesGezet() {
        return allesGezet;
    }

    public Vak getGekozenVak() {
        return gekozenVak;
    }

    public void resetGekozenVak() {
        gekozenVak = null;
    }

    private void voegAlleKeuzeStukkenToe() {
        int i = 0;
        for (Stuk s : game.getLeger(game.ROOD)) {
            if (keuzePionnenRood.containsKey(s.getType())) {
                keuzePionnenRood.put(s.getType(), keuzePionnenRood.get(s.getType()) + 1);
                keuzeVakRood[i - 1].setText(String.valueOf(keuzePionnenRood.get(s.getType())));
            }
            else {
                keuzePionnenRood.put(s.getType(), 1);
                s.setLeger(game.ROOD);
                keuzeVakRood[i].setPion(s);
                keuzeVakRood[i].createIcon(s.getType(), game.ROOD);
                keuzeVakRood[i].setText(String.valueOf(keuzePionnenRood.get(s.getType())));

                i++;
            }
        }
        i = 0;
        for (Stuk s : game.getLeger(game.BLAUW)) {
            if (keuzePionnenBlauw.containsKey(s.getType())) {
                keuzePionnenBlauw.put(s.getType(), keuzePionnenBlauw.get(s.getType()) + 1);
                keuzeVakBlauw[i - 1].setText(String.valueOf(keuzePionnenBlauw.get(s.getType())));
            }
            else {
                keuzePionnenBlauw.put(s.getType(), 1);
                s.setLeger(game.BLAUW);
                keuzeVakBlauw[i].setPion(s);
                keuzeVakBlauw[i].createIcon(s.getType(), game.BLAUW);
                keuzeVakBlauw[i].setText(String.valueOf(keuzePionnenBlauw.get(s.getType())));
                i++;
            }
        }
    }

    public void verminderPion(PionType p, String leger) {
        if (leger.equals(game.ROOD)) {
            keuzePionnenRood.put(p, keuzePionnenRood.get(p) - 1);
        }
        else if (leger.equals(game.BLAUW)) {
            keuzePionnenBlauw.put(p, keuzePionnenBlauw.get(p) - 1);
        }
        updateVakken(leger);
    }

    public void vermeerderPion(PionType p, String leger) {
        if (leger.equals(game.ROOD)) {
            keuzePionnenRood.put(p, keuzePionnenRood.get(p) + 1);
        }
        else if (leger.equals(game.BLAUW)) {
            keuzePionnenBlauw.put(p, keuzePionnenBlauw.get(p) + 1);
        }
        updateVakken(leger);
    }

    private void updateVakken(String leger) {
        if (leger.equals(game.ROOD)) {
            for (Vak v : keuzeVakRood) {
                v.setText(String.valueOf(keuzePionnenRood.get(v.getPion().getType())));
            }
        }
        else if (leger.equals(game.BLAUW)) {
            for (Vak v : keuzeVakBlauw) {
                v.setText(String.valueOf(keuzePionnenBlauw.get(v.getPion().getType())));
            }
        }
    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        Vak geklikt = (Vak) e.getSource();

        if (e.getButton() == 1) {
            if (allesGezet) {
            }
            else {
                if (gekozenVak != null) {
                    gekozenVak.setBackground(Color.ORANGE);
                }
                if (geklikt.getPion().getLeger().equals(game.BLAUW)) {
                    if (keuzePionnenBlauw.get(geklikt.getPion().getType()) > 0) {
                        gekozenVak = geklikt;
                        gekozenVak.setBackground(Color.GREEN);
                    }

                }
                else if (geklikt.getPion().getLeger().equals(game.ROOD)) {
                    if (keuzePionnenRood.get(geklikt.getPion().getType()) > 0) {
                        gekozenVak = geklikt;
                        gekozenVak.setBackground(Color.GREEN);
                    }

                }

            }
        }
        else {
            if (gekozenVak != null) {
                gekozenVak.setBackground(Color.ORANGE);
                gekozenVak = null;
            }
        }

    }

    public void controleerPionnen() {
        allesGezet = true;
        for (PionType p : keuzePionnenRood.keySet()) {
            if (keuzePionnenRood.get(p) > 0) {
                allesGezet = false;
            }
        }
        for (PionType p : keuzePionnenBlauw.keySet()) {
            if (keuzePionnenBlauw.get(p) > 0) {
                allesGezet = false;
            }
        }
        if (allesGezet) {
            JOptionPane.showMessageDialog(null, "Rood mag de eerste zet doen!", "Het spel begint", JOptionPane.INFORMATION_MESSAGE);
        }
    }

    public void mouseReleased(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }
}
